package cn.lizemin.authenticator;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

/**
 * @author lzm
 * @version 1.0
 * @description: 测试shiro的权限认证流程，从ini配置文件中获取认证所需要的数据（账号，密码）
 * @date 2022/2/20 10:01
 */
public class TestAuthenticator {

    /**
     * 程序的入口
     */
    public static void main(String[] args) {
        //1.创建安全管理器对象
        DefaultSecurityManager securityManager = new DefaultSecurityManager();

        //2.给安全管理器设置realm，从文件中获取账号和密码
        securityManager.setRealm(new IniRealm("classpath:shiroConfig.ini"));

        //3.SecurityUtils 给全局安全工具类设置安全管理器
        SecurityUtils.setSecurityManager(securityManager);

        //4.关键对象 subject 主体
        Subject subject = SecurityUtils.getSubject();


        //5.根据用户名和密码创建令牌
        UsernamePasswordToken token = new UsernamePasswordToken("zhang","12345");

        try{
            System.out.println("认证状态: "+ subject.isAuthenticated());
            //用户认证，token认证
            subject.login(token);
            System.out.println("认证状态: "+ subject.isAuthenticated());
            
        }catch (UnknownAccountException e){
            e.printStackTrace();
            System.out.println("认证失败: 用户名不存在~");

        }catch (IncorrectCredentialsException e){
            e.printStackTrace();
            System.out.println("认证失败: 密码错误~");
        }


    }


}
